home *** CD-ROM | disk | FTP | other *** search
-
- The generic functions in GCOOPE Version 1.0 initial release.
-
- by Brian Lee Price
-
- Released as Public Domain July, 1994.
-
-
-
- I. The flavors of New, the following constructors are defined:
-
- A. Class constructor
-
- form of call;
-
- 1. normal
-
- newclass=g(New)(Class, classVarSize, instanceVarSize,
- ancestor list terminated by END);
-
-
- 2. strong typing
-
- newclass=NEW(Class)(Class, classVarSize, instanceVarSize,
- ancestor list terminated by END);
-
- this call creates an instance of Class, ie a new class.
- should only be called from within a CLASS_INSTALL function.
-
-
-
- B. Other constructors
-
- form of call;
-
- 1. normal
-
- newobject=g(New)(className, initialParameters);
-
- 2. strong typing
-
- newobject=NEW(className)(className, initialParameters);
-
- The form of the parameter list is given in each class description.
-
-
- II. Other generic functions:
-
- A. Impossible to prototype generics;
-
- changeVal and valueOf are pretty much impossible to deal with
- under strong typing. For valueOf, you can use the return
- value type casts given in gcoope10.h.
-
- The trouble with changeVal is although it always returns an
- object type and always takes an object type as the first
- parameter, the second parameter is a different type for every
- object class it is defined for. Still, I'd rather pass by
- value and take my chances with weak typing than go through
- the pains of passing by pointer.
-
- valueOf has the opposite problem, it always takes only one
- parameter of type object, but its return value changes for
- each object class it is defined for. In gcoope10.h there
- are some return value method typecasts defined that can
- help you avoid many problems, but you still must know what
- type to expect.
-
- For both of the above, the primary usage should be by other
- class definitions rather than applications programs, this
- should at least localize any problems.
-
- Accessing:
-
- The above generics should be called in the following
- manner:
-
- 1. normal
-
- returnValue= ((returnTypeCast)g)(genName)(parms);
-
- 2. strong typing
-
- returnValue= ((returnTypeCast)g)(GEN(genName))(parms);
-
-
- B. Standard format generics;
-
- The following generic functions have a standardized interface,
- they always return the same type and always take the same
- number and type of parameters regardless of the class definition
- for which they are defined.
-
- I'm going to show them here as standard function prototypes, but
- bear in mind that you must call them as follows:
-
- 1. normal
-
- returnValue= ((returnTypeCast) g)(genName)(parameters);
-
- 2. strong typing
-
- returnValue= G(genName)(parameters);
-
-
- Here are the generics given as standard prototypes:
-
-
- object reSize(object, word)
- object putElem(object, word, void *)
- void * getElem(object, word)
- word sizeOf(object)
- word lengthOf(object)
- word numElems(object)
- object classOf(object)
- object ivSize(object)
- object respondsTo(object, generic)
- object deepCopy(object)
- object shallowCopy(object, object)
- object asString(object)
- object asHexStr(object)
- object asShortInt(object)
- object asLongInt(object)
- object asUnsigned(object)
- object asChar(object)
- int addUnit(object, void *)
- object rmvUnit(object, int)
- void * getUnit(object, int)
- object compact(object, boolean)
- long getPos(object)
- object strmErr(object)
- object setPos(object, long, int)
- object putByte(object, byte)
- object getByte(object)
- object clrErr(object)
- object SetBuf(object, char *, int, word)
- object Flush(object)
- object Stat(object)
- int Putc(object, char)
- int Getc(object)
- int UnGet(object, char)
- int Puts(object, const char *)
- void * Gets(object, char *, int)
- int Write(object, const char *, word, word)
- int Read(object, char *, word, word)
- void * addressOf(object)
-
- Most of these generics should be self explanatory, however
- consult the class definitions for details. Also note that when
- possible, I have attempted to stay with the standard ANSI C
- function library prototypes.
-
- A final reminder, don't try to use the prototypes above
- directly, use either the return type casting as needed or
- the strong typing option with the g or G dispatch call.
-
- The above goes to show that if you beat C firmly about the
- neck and shoulders with an appropriately sized sledgehammer, you
- can combine a reasonable degree of static type checking with
- run-time OOP flexibility.
-
-